﻿Imports System.Data.OleDb

Public Class clsCategorie

#Region "attributs"

    Private _noCategorie As Integer
    Private _nomCategorie As String
    Private _prcVoitureDepot As Double
    Private _montantDepot As Double
    Private _coutSurchargeKm As Double
    Private _coutLocationJour As Double
    Private _assurance As Double
    Private _kmAvantSurcharge As Integer
    Private _commentaire As String

#End Region

#Region "constructeurs"

    '********************************************************************************
    ' But:  Initialiser une nouvelle catégorie et, donc, lui attribuer un numéro unique
    '********************************************************************************
    Public Sub New()
        'créé un numéro de catégorie unique pour la nouvelle catégorie
        Dim bdCategorie = New cls_GestionBD("taco.mdb")
        bdCategorie.remplirDataSet("SELECT MAX(noCategorie) AS noMaximum FROM tblCategories", "tblCategorie")

        _noCategorie = nvl(bdCategorie.dsBd.Tables("tblCategorie").Rows(0).Item("noMaximum"), 0) + 1
        nomCategorie = ""
        prcVoitureDepot = 0
        montantDepot = 0
        coutSurchargeKm = 0
        coutLocationJour = 0
        assurance = 0
        kmAvantSurcharge = 0
        commentaire = ""
    End Sub

    '********************************************************************************
    ' But:  Initialiser une catégorie à partir des ses informations provenant de la base de données
    ' Paramètres:
    '   row:    Enregistrement résultant d'une requête SELECT * FROM tblCategorie
    '********************************************************************************
    Public Sub New(ByVal row As DataRow)
        With row
            _noCategorie = nvl(.Item("noCategorie"), Nothing)
            nomCategorie = nvl(.Item("nomCategorie"), Nothing)
            prcVoitureDepot = nvl(.Item("prcVoitureDepot"), Nothing)
            montantDepot = nvl(.Item("montantDepot"), Nothing)
            coutSurchargeKm = nvl(.Item("coutSurchargeKm"), Nothing)
            coutLocationJour = nvl(.Item("coutLocationJour"), Nothing)
            assurance = nvl(.Item("assurance"), Nothing)
            kmAvantSurcharge = nvl(.Item("kmAvantSurcharge"), Nothing)
            commentaire = nvl(.Item("commentaire"), Nothing)
        End With
    End Sub

#End Region

#Region "get/set"

    ReadOnly Property noCategorie() As Integer
        Get
            Return _noCategorie
        End Get
    End Property

    Property nomCategorie() As String
        Get
            Return _nomCategorie
        End Get
        Set(ByVal value As String)

            If value <> "" Then
                _nomCategorie = value
            Else
                _nomCategorie = "NouvelleCatégorie"
            End If

        End Set
    End Property

    Property prcVoitureDepot() As Double
        Get
            Return _prcVoitureDepot
        End Get
        Set(ByVal value As Double)

            If value >= 0 AndAlso value <= 1 Then
                _prcVoitureDepot = value
            Else
                _prcVoitureDepot = 0
                MsgBox("ERREUR: prcVoitureDepot doit être entre 0 et 1.")
            End If

        End Set
    End Property

    Property montantDepot() As Double
        Get
            Return _montantDepot
        End Get
        Set(ByVal value As Double)

            If value >= 0 Then
                _montantDepot = value
            Else
                MsgBox("ERREUR: montantDepot doit être plus grand ou égale à 0.")
                _montantDepot = 0
            End If

        End Set
    End Property

    Property coutSurchargeKm() As Double
        Get
            Return _coutSurchargeKm
        End Get
        Set(ByVal value As Double)

            If value >= 0 Then
                _coutSurchargeKm = value
            Else
                MsgBox("ERREUR: coutSurchargeKm doit être plus grand ou égale à 0.")
                _coutSurchargeKm = 0
            End If

        End Set
    End Property

    Property coutLocationJour() As Double
        Get
            Return _coutLocationJour
        End Get
        Set(ByVal value As Double)

            If value >= 0 Then
                _coutLocationJour = value
            Else
                MsgBox("ERREUR: coutLocationJour doit être plus grand ou égale à 0.")
                _coutLocationJour = 0
            End If

        End Set
    End Property

    Property assurance() As Double
        Get
            Return _assurance
        End Get
        Set(ByVal value As Double)

            If value >= 0 Then
                _assurance = value
            Else
                MsgBox("ERREUR: assurance doit être plus grand ou égale à 0.")
                _assurance = 0
            End If

        End Set
    End Property

    Property kmAvantSurcharge() As Integer
        Get
            Return _kmAvantSurcharge
        End Get
        Set(ByVal value As Integer)

            If value >= 0 Then
                _kmAvantSurcharge = value
            Else
                MsgBox("ERREUR: kmAvantSurcharge doit être plus grand ou égale à 0.")
                _kmAvantSurcharge = 0
            End If

        End Set
    End Property

    Property commentaire() As String
        Get
            Return _commentaire
        End Get
        Set(ByVal value As String)
            _commentaire = value
        End Set
    End Property

#End Region

#Region "méthodes"

    '********************************************************************************
    ' But:  Enregistrer la catégorie dans la base de données
    '********************************************************************************
    Public Sub enregistrer()
        'importe la catégorie de la base de données
        Dim bd As New cls_GestionBD("taco.mdb")
        bd.daBd.SelectCommand = New OleDbCommand("SELECT * FROM tblCategories where noCategorie = @noCategorie")
        bd.daBd.SelectCommand.Parameters.Add("@noCategorie", OleDbType.Integer).Value = noCategorie
        bd.remplirDataSet("tblCategories")

        'met à jour la catégorie si elle existe déjà dans la base de données
        If bd.dsBd.Tables("tblCategories").Rows.Count = 1 Then
            With bd.dsBd.Tables("tblCategories").Rows(0)
                .Item("noCategorie") = noCategorie
                .Item("nomCategorie") = nomCategorie
                .Item("prcVoitureDepot") = prcVoitureDepot
                .Item("montantDepot") = montantDepot
                .Item("coutSurchargeKm") = coutSurchargeKm
                .Item("coutLocationJour") = coutLocationJour
                .Item("assurance") = assurance
                .Item("kmAvantSurcharge") = kmAvantSurcharge
                .Item("commentaire") = commentaire
            End With

            'créé un nouvel enregistrement si la catégorie n'existe pas encore dans la base de données
        ElseIf bd.dsBd.Tables("tblCategories").Rows.Count = 0 Then

            Dim lNewRow As DataRow
            lNewRow = bd.dsBd.Tables("tblCategories").NewRow

            With lNewRow
                .Item("noCategorie") = noCategorie
                .Item("nomCategorie") = nomCategorie
                .Item("prcVoitureDepot") = prcVoitureDepot
                .Item("montantDepot") = montantDepot
                .Item("coutSurchargeKm") = coutSurchargeKm
                .Item("coutLocationJour") = coutLocationJour
                .Item("assurance") = assurance
                .Item("kmAvantSurcharge") = kmAvantSurcharge
                .Item("commentaire") = commentaire
            End With

            bd.dsBd.Tables("tblCategories").Rows.Add(lNewRow)

        End If

        'met à jour la base de données
        bd.miseAJourBD("tblCategories")


    End Sub

    '********************************************************************************
    ' But:  Supprimer la catégorie de la base de données
    '********************************************************************************
    Public Sub supprimer()
        'importe la catégorie de la base de données
        Dim bd As New cls_GestionBD("taco.mdb")
        bd.daBd.SelectCommand = New OleDbCommand("SELECT * FROM tblCategories where noCategorie = @noCategorie")
        bd.daBd.SelectCommand.Parameters.Add("@noCategorie", OleDbType.Integer).Value = noCategorie
        bd.remplirDataSet("tblCategories")

        'supprime la catégorie si elle existe dans la base de données, sinon, affiche un message d'erreur
        If bd.dsBd.Tables("tblCategories").Rows.Count = 1 Then
            bd.dsBd.Tables("tblCategories").Rows(0).Delete()
        ElseIf bd.dsBd.Tables("tblCategories").Rows.Count = 0 Then
            MsgBox("ERREUR: La catégorie n'existe pas dans la base de données." & vbCrLf & _
                   "Il est donc impossible de la supprimer.")
        End If

        'met à jour la base de données
        bd.miseAJourBD("tblCategories")

    End Sub

    '********************************************************************************
    ' But:  Afficher tous les attributs de la catégorie
    ' Return:   Une chaine de caractère contenant chaque attribut accompagné de sa valeur
    '********************************************************************************
    Public Overrides Function ToString() As String
        Return "noCategorie:" & vbTab & noCategorie & vbCrLf & _
                "nomCategorie:" & vbTab & nomCategorie & vbCrLf & _
                "prcVoitureDepot:" & vbTab & prcVoitureDepot & vbCrLf & _
                "montantDepot:" & vbTab & montantDepot & vbCrLf & _
                "coutSurchargeKm:" & vbTab & coutSurchargeKm & vbCrLf & _
                "coutLocationJour:" & vbTab & coutLocationJour & vbCrLf & _
                "assurance:" & vbTab & assurance & vbCrLf & _
                "kmAvantSurcharge:" & vbTab & kmAvantSurcharge & vbCrLf & _
                "commentaire:" & vbTab & commentaire
    End Function

#End Region

End Class
